package com.hilihili.service.impl;

import com.hilihili.domain.dto.DanmakuInfoDTO;
import com.hilihili.domain.dto.DanmakuPageDTO;
import com.hilihili.domain.dto.ShieldDanmukaDTO;
import com.hilihili.domain.entity.Danmaku;
import com.hilihili.domain.vo.DanmakuInfo;
import com.hilihili.mapper.DanmakuMapper;
import com.hilihili.service.IDanmakuService;
import com.hilihili.util.DateChangeUtil;
import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 评论Service业务层处理
 *
 * @author xhc
 * @date 2023-11-15
 */
@Service
public class DanmakuServiceImpl implements IDanmakuService {
    @Autowired
    private DanmakuMapper danmakuMapper;

    @Override
    public Long selectDanmakuCountByVideoId(Long videoId) {
        return danmakuMapper.selectDanmakuCountByVideoId(videoId);
    }

    /**
     * 查询评论
     *
     * @param id 评论主键
     * @return 评论
     */
    @Override
    public Danmaku selectDanmakuById(Long id) {
        return danmakuMapper.selectDanmakuById(id);
    }

    @Override
    public List<DanmakuInfo> selectDanmakuList(String videoId) {
        List<DanmakuInfo> danmakuInfos = danmakuMapper.selectDanmakuListByVideoId(videoId);
        danmakuInfos.forEach(danmakuInfo -> {
        //将时间序列化
            danmakuInfo.setTime(DateChangeUtil.formatDate(Integer.parseInt(danmakuInfo.getTime())));
            if(danmakuInfo.getSendTime() != null){
                danmakuInfo.setSendTime(danmakuInfo.getSendTime().substring(5,16));
            }
        });
        return danmakuInfos;
    }



    /**
     * 新增评论
     *
     * @param danmaku 评论
     * @return 结果
     */
    @Override
    public int insertDanmaku(Danmaku danmaku) {
        danmaku.setUpdatedAt(LocalDateTime.now());
        return danmakuMapper.insertDanmaku(danmaku);
    }

    /**
     * 修改评论
     *
     * @param danmaku 评论
     * @return 结果
     */
    @Override
    public int updateDanmaku(Danmaku danmaku) {
        return danmakuMapper.updateDanmaku(danmaku);
    }

    /**
     * 批量删除评论
     *
     * @param ids 需要删除的评论主键
     * @return 结果
     */
    @Override
    public int deleteDanmakuByIds(Long[] ids) {
        return danmakuMapper.deleteDanmakuByIds(ids);
    }

    /**
     * 删除评论信息
     *
     * @param id 评论主键
     * @return 结果
     */
    @Override
    public int deleteDanmakuById(Long id) {
        return danmakuMapper.deleteDanmakuById(id);
    }

    @Override
    public DanmakuPageDTO selectDanmakuListById(DanmakuInfoDTO danmakuInfoDTO) {
        DanmakuPageDTO danmakuPageDTO = new DanmakuPageDTO();
        List<Danmaku> danmakus = danmakuMapper.selectDanmakuListById(danmakuInfoDTO);
        danmakuPageDTO.setDanmakuList(danmakus);
        danmakuPageDTO.setCount(danmakuMapper.countDanmakuById(danmakuInfoDTO.getVideoId()));
        return danmakuPageDTO;
    }

    @Override
    public AjaxResult shieldUserDanmuka(ShieldDanmukaDTO shieldDanmukaDTO) {
        if (danmakuMapper.addUserShieldDanmika(shieldDanmukaDTO)){
            return AjaxResult.success();
        }else {
            return AjaxResult.error("系统异常");
        }

    }

    @Override
    public AjaxResult getShieldDanmukaList(Long userId) {
        List<Long> ids = danmakuMapper.getShieldDanmukaList(userId);
        return AjaxResult.success(ids);
    }

    @Override
    public AjaxResult cancelShieldUserDanmuka(ShieldDanmukaDTO shieldDanmukaDTO) {
        if (danmakuMapper.deleteShieldUserDanmuka(shieldDanmukaDTO)){
            return AjaxResult.success();
        }else {
            return AjaxResult.error("系统异常");
        }
    }
}
